// 封装请求功能函数

/*
 1. 封装功能函数
  1. 功能点明确
  2. 函数内部应该保留固定代码（静态的）
  3. 将动态的数据抽取形成形参，由使用者根据自身的情况动态的传入实参
  4. 一个良好的功能组件应该设置形参的默认值（ES6的形参默认值）

2. 封装功能组件
  1. 功能点明确
  2. 组件内部保留静态的代码
  3. 将动态的数据抽取成props参数，由使用者根据自身的情况以标签属性的形式动态传入props数据
  4. 一个良好的组件应该设置组件的必要性及数据类型
  props:{
    msg:{
      required:true,
      default:默认值,
      type:类型
    }
  }
*/
// 模块开发思想

import config from './config'
export default (url, data = {}, method = 'GET') => {
  // 前后端交互

  //  1. new Promise 初始化promise实例的状态为pending
  //  2. resolve 修改promise状态为成功状态resolved
  //  3. reject 修改promise状态为失败状态rejected
  return new Promise((resolve, reject) => {
    wx.request({
      // 因为config已经暴露了，所以可以直接使用里面的数据
      url: config.mobileHost + url,
      data,
      method,
      header: {
        // 'content-type':'application/json',
        'Cookie': wx.getStorageSync("cookie") ? wx.getStorageSync("cookie") : ''
      },
      // method: 'GET',
      // dataType: 'json',
      // responseType: 'text',
      success: (res) => {
        // console.log("请求成功", res);
        // 只有是登录页面的才保存cookies
        if (data.signal) {
          let arr = [];
          res.cookies.forEach(item => {
            arr.push(item.split(';')[0]);
          });
          wx.setStorageSync('cookie', arr.join(';'));
        }
        resolve(res.data);
      },
      fail: (err) => {
        // console.log("请求失败", err);
        reject(err);
      },
      // complete: () => {}
    });
  })

}